#pragma once

#include <iostream>

class BankTemplateMethod {
public:
    void process() const {
        takeNumber();
        hook();
        transact();
        evaluate();
    }

protected:
    void takeNumber() const { std::cout << "1. 排队拿号" << std::endl; }

    virtual void transact() const { std::cout << "2. 办理业务" << std::endl; }

    void evaluate() const { std::cout << "3. 反馈评分" << std::endl; }

    virtual void hook() const {}
};